%load_ext autoreload
%autoreload 2
# Importation des librairies
import os
from glob import glob
import xml
from bokeh.resources import INLINE
import bokeh.io
from bokeh import *
from bokeh.plotting import figure, output_notebook, show
bokeh.io.output_notebook(INLINE)
from os import listdir
from os.path import isfile, join, isdir
from bokeh.sampledata.autompg import autompg as df
import matplotlib.pyplot as plt
#from bokeh.io import output_notebook
import holoviews as hv
from holoviews import dim
hv.extension('bokeh')
def generate_barplot(keys, values, plot_title, xaxis_label, yaxis_label):
# Graphique du nombre total de fichiers (xml, jpg, pdf, etc.) par revue
"""
:param keys : liste qui contient les catégories du barplot
:param values : liste qui contient le valeur de chaque catégorie
:param plot_title : Titre du barplot
:param xaxis_label : nom de l'axe x
:param yaxis_label : nom de l'axe y
:return p : plot du barplot stockée dans la variable p
"""
categories = keys
data = values
p = figure(x_range=categories, title=plot_title)
p.vbar(x=categories, top=data, width=0.7)
p.xaxis.axis_label = xaxis_label
p.yaxis.axis_label = yaxis_label
p.xaxis.major_label_orientation = "vertical"
show(p)
# Variables globales
# URL de la localisation du corpus (Le dossier qui contient les dossiers etudfr13 et im118)
corpus_url = "/media/spiritus/LongTermStorage/Projects/DSI Projects/DSI Projects 2021/Huma-Num/Corpus"
etudes_francais_revue_pattern = 'etudfr13'
intermodalites_revue_pattern = 'im118'
# Création des URL de chaque revue
ef_url = os.path.join(corpus_url, etudes_francais_revue_pattern)
im_url = os.path.join(corpus_url, intermodalites_revue_pattern)
# Nom du fichier XML généré par Érudit
nom_fichier_xml_erudit = 'ERUDITXSD300.xml'
ef_revue_object = Revue(ef_url)
im_revue_object = Revue(im_url)
# Numeros par revue
keys = ["EF", "IM"]
values = [len(ef_revue_object.numeros), len(im_revue_object.numeros)]
generate_barplot(keys=keys,
values=values,
plot_title="Nombre de numéros par revue",
xaxis_label="Revue",
yaxis_label="Nombre de numéros")
print(list(zip(keys, values)))
[('EF', 163), ('IM', 32)]
#Distribution d'articles par numéro sur chaque revue
# Revue EF
ef_df = ef_revue_object.get_num_articles_by_number()
generate_barplot(keys=ef_df['Numero'].tolist(),
values=ef_df['Article'].tolist(),
plot_title="Nombre d'articles par numéro sur EF",
xaxis_label="Numero",
yaxis_label="Nombre d'articles")
#Distribution d'articles par numéro sur chaque revue
# Revue IM
im_df = im_revue_object.get_num_articles_by_number()
generate_barplot(keys=im_df['Numero'].tolist(),
values=im_df['Article'].tolist(),
plot_title="Nombre d'articles par numéro sur IM",
xaxis_label="Numero",
yaxis_label="Nombre d'articles")
# Nous rajoutons le nom de la revue afin de construire un boxplot au niveau des revues
ef_df['Revue'] = ["EF" for x in range(0, len(ef_df))]
im_df['Revue'] = ["IM" for x in range(0, len(im_df))]
# Joindre le DataFrame de la revue EM et le DF de la revue IM
corpus_df = pd.concat([ef_df, im_df])
title = "Distribution du nombre d'articles par numéro"
boxwhisker = hv.BoxWhisker(corpus_df, ['Revue'], 'Article', label=title)
boxwhisker.opts(show_legend=False, width=700, height=700, box_fill_color=dim('origin').str(), cmap='Set1')
WARNING:param.BoxWhiskerPlot01611: Specified box_fill_color dim transform dim('origin').astype(<class 'str'>) could not be applied, as not all dimensions could be resolved.
WARNING:param.BoxWhiskerPlot01611: Specified box_fill_color dim transform dim('origin').astype(<class 'str'>) could not be applied, as not all dimensions could be resolved.
En moyenne, les deux revues publient 10 articles par numéro. Il y a des cas extremes dans la revue EF où nous pouvons trouver des numéros qui contiennent de 3 à 33 articles. Par ailleurs, la quantité d'articles par numéro de la revue IM est plutôt stable.
ef_articles_by_year = ef_revue_object.get_articles_frequency_by_year()
im_articles_by_year = im_revue_object.get_articles_frequency_by_year()
ef_articles_by_year.head(2)
| Year | Articles | |
|---|---|---|
| 0 | 1967 | 48 |
| 1 | 2004 | 33 |
ef_articles_by_year = ef_articles_by_year.sort_values(by=['Year'])
im_articles_by_year = im_articles_by_year.sort_values(by=['Year'])
def create_line_plot(x, y, xlabel="", ylabel="", title="", num_terms=30):
p = figure(plot_width=800, plot_height=800, x_axis_label=xlabel, y_axis_label=ylabel)
# add a circle renderer with x and y coordinates, size, color, and alpha
#p.circle(x, y, size=15, line_color="navy", fill_color="orange", fill_alpha=0.5)
p.line(x, y, legend_label="Temp.", line_width=2)
#p.xaxis = xlabel
#p.yaxis = ylabel
p.title.text = title
show(p)
def create_multiple_line_plot(x1, y1, x2, y2, xlabel="", ylabel="", title="", num_terms=30, label_line1="Temp", label_line2="Temp"):
p = figure(plot_width=800, plot_height=800, x_axis_label=xlabel, y_axis_label=ylabel)
# add a circle renderer with x and y coordinates, size, color, and alpha
#p.circle(x, y, size=15, line_color="navy", fill_color="orange", fill_alpha=0.5)
p.line(x1, y1, legend_label="EF.", line_width=2)
p.line(x2, y2, legend_label="IM.", line_width=2, line_color="red")
#p.xaxis = xlabel
#p.yaxis = ylabel
p.title.text = title
show(p)
create_line_plot(x=ef_articles_by_year['Year'].tolist(),
y=ef_articles_by_year['Articles'].tolist(),
xlabel="Année",
ylabel="Nombre d'articles",
title="Nombre d'articles par année de la revue EF")
create_line_plot(x=im_articles_by_year['Year'].tolist(),
y=im_articles_by_year['Articles'].tolist(),
xlabel="Année",
ylabel="Nombre d'articles",
title="Nombre d'articles par année de la revue IM")
# Plot comparatif : nombre de publications par année EF vs IM
create_multiple_line_plot(x1=ef_articles_by_year['Year'].tolist(),
y1=ef_articles_by_year['Articles'].tolist(),
x2=im_articles_by_year['Year'].tolist(),
y2=im_articles_by_year['Articles'].tolist(),
xlabel="Année",
ylabel="Nombre d'articles",
title="Nombre d'articles par année : Revue EF vs Revue IM",
label_line1="EF",
label_line2="IM")
Concernant la tendence de la revue EF, nous pouvons remarquer que les pics de publication se trouvent entre 1965 et 1970, avec un maximum de 68 publications par année. Les niveaux les plus de publication se trouvent en 1978 avec un total de 14 publications. Entre les années 1978 et 2000 la revue a augmenté progressivement le nombre de publications jusqu'à une stabilité relative à partir des années 2000.
Par ailleurs, selon ce corpus, la revue IM a commencé à publier en 2003 et le dernière année de publication, c'est 2019. Le nombre de publications montre des changements très drastiques par année entre 2014 et 2019
Dans l'analyse des données textuels, il sera intérêssant d'évaluer si le corpus contient des articles dupliqués, ce qui permettra de valider la fiabilité de ces tendences historiques de publication par revue.
df_revue_im = im_revue_object.get_journal_to_data_frame()
len(df_revue_im[df_revue_im['Year'] == 2003]['Article'].tolist())
25
df_revue_ef = ef_revue_object.get_journal_to_data_frame()
len(df_revue_ef[df_revue_ef['Year'] == 1978]['Article'].tolist())
14